﻿Imports System.Collections.Generic
Imports System.Data
Imports Biz
Imports System.Data.SqlClient


''' <summary>
''' Clase de la capa de acceso a datos para el manejo de la entidad Solicitud
''' </summary>
''' <remarks></remarks>
Public Class DALSolicitud

    Private Shared m_Instance As DALSolicitud
    Private Shared m_Semaforo As New Object
    Private m_TDGSolicitud As TDGSolicitud


    Public Function Insert(obj As cSolicitud) As Boolean
        Dim iResultado As Int16 = 0
        Dim database As cDatabase

        Try
            database = cDatabase.Instance

            database.Conectar()
            iResultado = m_TDGSolicitud.Insert(database.Conexion, obj.Soli_Fecha, obj.oPostulante.oTipo_Documento.TDoc_Codigo, obj.oPostulante.Postu_NroDoc, obj.oBusqueda.Busq_Numero, obj.Soli_Observaciones, obj.oMedio_Busqueda.MedB_Codigo)
            database.Desconectar()

            Return (iResultado > 0)
        Catch ex As Exception
            Throw New Excepciones.SolicitudFalloAlta(ex)
        End Try

    End Function

    Public Function Update(obj As cSolicitud) As Boolean
        Dim iResultado As Int16 = 0
        Dim database As cDatabase

        Try
            database = cDatabase.Instance

            database.Conectar()
            m_TDGSolicitud.Update(database.Conexion, _
                                        obj.Soli_Numero, _
                                        obj.Soli_Fecha, _
                                        obj.oPostulante.oTipo_Documento.TDoc_Codigo, _
                                        obj.oPostulante.Postu_NroDoc, _
                                        obj.Soli_Observaciones, _
                                        obj.oMedio_Busqueda.MedB_Codigo)
            database.Desconectar()

            Return (iResultado > 0)
        Catch ex As Exception
            Throw New Excepciones.SolicitudFalloEditar(ex)
        End Try
    End Function

    Public Function Delete(obj As cSolicitud) As Boolean
        Dim iResultado As Int16 = 0
        Dim database As cDatabase

        Try
            database = cDatabase.Instance

            database.Conectar()
            m_TDGSolicitud.Delete(database.Conexion, obj.Soli_Numero)
            database.Desconectar()

            Return (iResultado > 0)
        Catch ex As Exception
            Throw New Excepciones.SolicitudFalloBaja(ex)
        End Try

    End Function

    Public Function Sel(obj As cSolicitud) As cSolicitud
        Dim dr As SqlDataReader
        Dim database As cDatabase

        Try
            database = cDatabase.Instance

            database.Conectar()
            dr = m_TDGSolicitud.Find(database.Conexion, obj.Soli_Numero)

            If dr.HasRows Then

                dr.Read()

                obj.Soli_Numero = Utils.Convert.ToInt32(dr.GetValue(0))
                obj.Soli_Fecha = Utils.Convert.ToDateTime(dr.GetValue(1))
                obj.oPostulante.oTipo_Documento.TDoc_Codigo = Utils.Convert.ToInt16(dr.GetValue(2))
                obj.oPostulante.Postu_NroDoc = Utils.Convert.ToStr(dr.GetValue(3))
                obj.oBusqueda.Busq_Numero = Utils.Convert.ToInt16(dr.GetValue(4))
                obj.Soli_Observaciones = Utils.Convert.ToStr(dr.GetValue(5))
                obj.oMedio_Busqueda.MedB_Codigo = Utils.Convert.ToInt16(dr.GetValue(6))
                obj.DVH = Utils.Convert.ToInt32(dr.GetValue(7))

                obj.oPostulante.Postu_NombreAp = Utils.Convert.ToStr(dr.GetValue(8))
                obj.oMedio_Busqueda.MedB_Descrip = Utils.Convert.ToStr(dr.GetValue(9))
                obj.oPostulante.Postu_FNac = Utils.Convert.ToDateTime(dr.GetValue(10))
                obj.oPostulante.Postu_Nacionalidad = Utils.Convert.ToStr(dr.GetValue(11))
                obj.oPostulante.Postu_Telefono = Utils.Convert.ToStr(dr.GetValue(12))
                obj.oPostulante.Postu_Mail = Utils.Convert.ToStr(dr.GetValue(13))
                obj.oPostulante.Postu_Estudios = Utils.Convert.ToStr(dr.GetValue(14))
                obj.oPostulante.Postu_Experiencia = Utils.Convert.ToStr(dr.GetValue(15))
                obj.oPostulante.Postu_Obs = Utils.Convert.ToStr(dr.GetValue(16))

                obj.oMedio_Busqueda.Tipo_Medio_Busqueda.TMedB_Codigo = Utils.Convert.ToInt16(dr.GetValue(17))
                obj.oMedio_Busqueda.Tipo_Medio_Busqueda.TMedB_Descrip = Utils.Convert.ToStr(dr.GetValue(18))

                dr.Close()
            Else
                obj = Nothing
            End If

            database.Desconectar()

            Return obj
        Catch ex As Exception
            Throw New Excepciones.SolicitudFalloBuscar(ex)
        End Try
    End Function

    Public Function SelectAllPorBusqueda(oBusqueda As cBusqueda) As Collection
        Dim dr As SqlDataReader
        Dim colObjetos As Collection
        Dim obj As cSolicitud
        Dim database As cDatabase


        Try
            database = cDatabase.Instance

            database.Conectar()
            dr = m_TDGSolicitud.FindAllPorBusqueda(database.Conexion, oBusqueda.Busq_Numero)

            If dr.HasRows Then

                colObjetos = New Collection

                Do While dr.Read

                    obj = New cSolicitud

                    obj.Soli_Numero = Utils.Convert.ToInt32(dr.GetValue(0))
                    obj.Soli_Fecha = Utils.Convert.ToDateTime(dr.GetValue(1))
                    obj.oPostulante.oTipo_Documento.TDoc_Codigo = Utils.Convert.ToInt16(dr.GetValue(2))
                    obj.oPostulante.Postu_NroDoc = Utils.Convert.ToStr(dr.GetValue(3))
                    obj.oBusqueda.Busq_Numero = Utils.Convert.ToInt16(dr.GetValue(4))
                    obj.Soli_Observaciones = Utils.Convert.ToStr(dr.GetValue(5))
                    obj.oMedio_Busqueda.MedB_Codigo = Utils.Convert.ToInt16(dr.GetValue(6))
                    obj.DVH = Utils.Convert.ToInt32(dr.GetValue(7))

                    obj.oPostulante.Postu_NombreAp = Utils.Convert.ToStr(dr.GetValue(8))
                    obj.oMedio_Busqueda.MedB_Descrip = Utils.Convert.ToStr(dr.GetValue(9))

                    obj.oPostulante.Postu_Telefono = Utils.Convert.ToStr(dr.GetValue(10))
                    obj.oPostulante.Postu_Mail = Utils.Convert.ToStr(dr.GetValue(11))

                    colObjetos.Add(obj)

                Loop

                dr.Close()

            Else

                colObjetos = Nothing

            End If

            database.Desconectar()

            Return colObjetos
        Catch ex As Exception
            Throw New Excepciones.SolicitudFalloConsultar(ex)
        End Try
    End Function

    Public Shared Function Instance() As DALSolicitud
        If m_Instance Is Nothing Then
            SyncLock (m_Semaforo)
                If m_Instance Is Nothing Then
                    m_Instance = New DALSolicitud
                End If
            End SyncLock
        End If

        Return m_Instance
    End Function

    Private Sub New()
        m_TDGSolicitud = TDGSolicitud.Instance()
    End Sub

End Class
